﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct PersonConst
{
	char name[64];
	int age;
	int ID;
	double score;
};
//2.使用结构体变量作为参数，每次传递过程中，都要耗费80个字节，太浪费空间。换成结构体指针做为参数，每次只传个地址，
	//就4个字节，能节省很多空间；
//void PrintPerson(struct PersonConst person)
//3.使用结构体指针作为参数，要规避地址传递的副作用，即在使用对象指针的情况下，有可能意外修改数据。所以，使用const
	//修饰，来保证指针变量person指向的值，不能被修改；person->ID=128;报错！
void PrintPerson(const struct PersonConst* person)
{
	//5.使用下面的做法，也能强行修改；这就太刻意了，一般不这样做。这样做，是通过修改指针的地址，达到修改指针指向的值；
	struct PersonConst* pc = (struct PersonConst*)person;
	pc->ID = 128;

	//printf("1.输出结构体person的内容，Name: %s Age: %d ID: %d Score: %f\n", person.name, person.age, person.ID, person.score);
	printf("4.使用结构体指针，输出person的内容，Name: %s Age: %d ID: %d Score: %f\n", person->name, person->age, person->ID, person->score);
}
void testConstUsage()
{
	struct PersonConst person = { "Trump",30,250,59.9 };
	//PrintPerson(person);//Name: Trump Age: 30 ID: 250 Score: 59.900000
	PrintPerson(&person);//Name: Trump Age: 30 ID: 250 Score: 59.900000-->Name: Trump Age: 30 ID: 128 Score: 59.900000
}

//main197：const的用法
int main197()
{
	testConstUsage();

	system("pause");
	return EXIT_SUCCESS;
}